<?php
namespace App\Http\Controllers\Icon;

use App\Models\UserM;
use App\Models\IconM;
use App\Models\ImageM;
use App\Models\TagM;
use App\Models\FavorM;
use App\Models\StoreM;
use App\Models\CommentM;
use App\Models\ReplyM;
use App\Models\CommentFavourM;
use App\Common\tbCommon;
use App\Common\excuteState;

use Uuid;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Database\QueryException;

use App\Common\File;
use App\Common\uploadFileConfig;
use App\Common\fashionMap;

use Intervention\Image\Facades\Image;
use App\Models\IconTopicM;
use PhpParser\Node\Stmt\Catch_;
use App\Models\TopicM;
use App\Http\Controllers\TopicController;

/**
* icon的 控制器
* @date: 2016年10月20日 下午8:09:45
* @author: lee
*/
class iconController extends Controller
{
    // 待插入 图片记录的 uuid
    // 数据添加失败后  用于已经添加数据记录的删除
    static private $imageIDs=array();
         
    // 测试功能
    static public function test(){
        //dd(IconM::loadAllNewestIconsByPages(1,0)) ;
        dd( File::getImgName());
        
    }
    
    
    static public function tstImg(){
        
        $a = "http://wx.qlogo.cn/mmopen/V62KVl82xeQiaYVex16bjMF4Lho6b8kuv3gzpqiaicBicQHMl6lqZ6byJHaS8FqQ3C45WISyho9mwpxseTOz22d0lQ/0";
        $image = file_get_contents($a);
        file_put_contents('/tstImg22.jpg', $image); 

        return "ss";

    }
    
    
    
    /**
     * 添加icon数据记录
     * @param Request $request
     * 传入数据形式:
     * { "iconInfo": { "icon": {"userid":9,"description":"user9 add","title":"title 9",
							"fashion_style":"fashion2","lng":120,"lat":30,"address":"test address"},
				 "image":[ 
				 			{ "imgFile":"imagefile1",
				 				"tag":	[ {"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"},
				 						  {"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"}
				 						] 
							},
							{ "imgFile":"imagefile2",
								"tag":	[ 	{"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"},
											{"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"}
									  	]
						  	},
						  	{ "imgFile":"imagefile3",
						  		"tag":	[	{"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"},
						  				 	{"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"}
						  				]
			  				 },
			  				 {"imgFile":"imagefile4",
			  				 	"tag":	[	{"pos_x":0,"pos_y":0,"itemtype":"trousers","itemid":32,"itemlink":"link2"}
			  				 			]
				 			}
			 			]
					}
	}
     */
    static public function addIcon(Request $request){
        try{
            $addDatas=json_decode($request->input('iconInfo'),true);
            if(count($addDatas)<1){
                return excuteState::inputDataError();
            }

            $upFileC=new uploadFileConfig();
            // 文件存储配置 信息
            $imgRoot=$upFileC->imgRootPath();
            $iconF=$upFileC->iconFolder();
            $thumbIconF=$upFileC->thumbIconFolder();
            
            // image的存储路径集合
            $imgPathArr= array();
            //$addDatas=self::$iconData2;
            
            // 存储 分解后的数据
            $icnArr=array();
            $imgArr=array();
            $tagArr=array();
            // 为上传数据 定义关联关系　并分解　存储数据
            tbCommon::parasIcnInputData($addDatas,$icnArr,$imgArr,$tagArr);
            
            $imageCount=count($imgArr);
            
            // image root url
            $imgRootURL=env('IMG_RUL');
            
            // 上传Image
            for($i=0;$i<$imageCount;$i++){
                $imgItem= $imgArr[$i];
                // 上传 image的值
                $imgKey=$imgItem['imgFile'];
                $imgName=$imgItem['path'];
                //dd($imgKey->getRealPath());
                $imgObj=$request->file($imgKey);
                $imgWidth=0;
                $imgHeigh=0;
                // 存储图片
                $imgFullPath=File::uploadImgFile($imgObj,$imgRoot,$iconF,
                            $thumbIconF, $imgName,0.5,$imgWidth,$imgHeigh);
                
                $imgArr[$i]['width']=$imgWidth;
                $imgArr[$i]['height']=$imgHeigh;
                
                // 存储成功
                if($imgFullPath !=null){
                    $imgArr[$i]['path']=$imgRootURL.'/'.$imgFullPath;
                    
                    // added by lee 20170719
                    $imgArr[$i]['thumb_path']=$imgRootURL.'/'.str_replace($iconF, $thumbIconF, $imgFullPath);
                    
                    array_push($imgPathArr, $imgFullPath);
                    // 删除 上传image的键
                    unset($imgArr[$i]['imgFile']);
                }else{ // 存储失败    删除上传的image
                    File::deltImgs($imgRoot,$imgPathArr);
                    return excuteState::saveFileError();
                }
            } // end image upload
            

   
    
            
            $icon=new IconM();
            // 存储 数据 事务
            DB::beginTransaction();
            try {
                
                //添加icon记录
                $icnfid=$icon->addItem($icnArr);
                // parse topic info
                $tpcIDS=$addDatas['topic'];
                $iconTpcs=array();
                if(count($tpcIDS)>0){
                    foreach ($tpcIDS as $value){
                        array_push($iconTpcs,['iconid'=>$icnfid,'topicid'=>$value]);
                    }
                    // add icon-topic
                    IconTopicM::addItems($iconTpcs);
                    // topic icon num ++
                    TopicM::plusTcpIcnS($tpcIDS);
                }

                
                //  批量 添加image记录
                ImageM::addItems($imgArr);
                // 添加 image的tag记录
                TagM::addItems($tagArr);

                
                DB::commit();
                // 返回状态
                return excuteState::OK();
            
            } catch (QueryException $e) {
                DB::rollBack();
                // 删除 已经上传的数据
                File::deltImgs($imgRoot,$imgPathArr);
                // 返回状态
                return excuteState::insertError();
            
            }
            
        }catch(\Exception $e){
            return excuteState::otherError();
        }
       
    }

    /**
     * 根据 icon的fid删除相关记录
     * @param bigint $icnfid,icon的fid
     */
    static public function deltIcon($icnfid){
        DB::beginTransaction();
        try {
            // 根据Icon的fid 返回 image的id和存储路径 和 comment的id 
            $imgCmtIDs=IconM::getImgAndCmtIDs($icnfid);
            
            // 获得 imge的uuid集合 
            $imgIds=$imgCmtIDs['imgids'];
            // 获取 image的path集合
            $imgPaths=$imgCmtIDs['imgpaths'];
            //获得 comment的id集合
            $cmtIds=$imgCmtIDs['cmtids'];
            
            $fileConfig=new uploadFileConfig();
            
            // icon存储根目录
            $imgRootPath=$fileConfig->imgRootPath();

            //批量删除icon图片
            File::deltImgs($imgRootPath, $imgPaths);
            
            // 依据image的uuid 删除tag表中的记录
            TagM::deltByImgIds($imgIds);
            // 依据image的uuuid 删除image记录
            ImageM::deltItems($imgIds);
            
            //删除 comment的id集合内的 reply
            ReplyM::deltItemsByCmtIDs($cmtIds);
            //删除 comment的id集合内的 comment-favour
            CommentFavourM::deltItemsByCmtIDs($cmtIds);
            // 删除评论
            CommentM::deltItemByIcnFid($icnfid);
            
            //删除 icon-favour 记录
            FavorM::deltItemByIcnFid($icnfid);
            //删除 icon-store 记录
            StoreM::deltItemByIcnFid($icnfid);
            IconM::deltItembyFid($icnfid);
            
            // delete icon-topic
            IconTopicM::dltTpcByIcn($icnfid);
            
            // TOPIC icon num --
            $tpcIds=IconTopicM::getTpcIDS($icnfid);
            if(count($tpcIds)>0){
                TopicM::minTcpIcnS($tpcIds);
            }
            
            DB::commit();
            // done scuessfully
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::deleteError();
        }
    }
    
    
    /**
     * 依据 user的id值 加载所有 icon的值
     * 并 加入icon的favour和 stored 状态
     * @param bigint $userid,用户id
     */
    static public function loadAllIcons($userid){
        try{
            $mainDatas=tbCommon::parseIconImgDatas(IconM::loadAllIcons($userid));
            
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);

            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));
            
        }catch(QueryException $e){
            return excuteState::selectError();
        }
    }
    

    
    /**
     * 依据用户的id ,检索条数,分页数 返回icon记录
     * @param bigint $userid 用户id
     * @param int $lmt  返回数据记录数
     * @param int $ofst 分页数
     */
    static public function loadAllIconsByPages($userid,$lmt,$ofst){
        try {
            $mainDatas= tbCommon::parseIconImgDatas(IconM::loadAllIconsByPages($userid,$lmt,$ofst));
            
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            
            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    
    /**
     * 返回 限制条件下的 最新的icon记录
     * @param number $userid
     * @param number $limit
     * @param number $offset
     */
    static  public  function  loadAllNewestIconsByPages($userid,$limit=50){
        try {
            $mainDatas= tbCommon::parseIconImgDatas(IconM::loadAllNewestIconsByPages($userid,$limit,0));
        
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            
            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));

        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    /**
     * 依据用户的id ,检索条数,icon的fid值  返回小于该fid值的icon记录
     * @param bigint $userid 用户id
     * @param int $lmt  返回数据记录数
     * @param int $ofst 分页数
     */
    static public function loadAllIconsByMinFid($userid,$lmt,$minFid){
        try {
            $mainDatas= tbCommon::parseIconImgDatas(IconM::loadAllIconsByMinFid($userid,$lmt,$minFid));
        
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            
            
            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));

        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }

    
    /**
     * 依据 用户id和 日期下
     * 返回 当月 上传Icon的日期 及其 当天上传的icon的集合
     * @param bigint $userid
     * @param string $date 日期 形式  “20160201
     * 
     *  返回形式 ["20160102"=>[iconfid1,iconfid2],
     *  "20160122"=>[iconfid3,iconfid4]]
     */
    static  public function loadIconInMonth($userid,$date){
        try {
            $dayIcons=IconM::loadIconInMonth($userid,$date);
            return excuteState::OKwithDatas(tbCommon::parseDayIcon($dayIcons)) ;
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    
    /**
     * 限制  返回 $beloadedUserid 用户的 icon记录
     * @param unknown $userid
     * @param unknown $lmt
     * @param unknown $offset
     */
    static  public function loadOthersIcons($beloadedUserid,$userid,$lmt,$off){
        try {
            $mainDatas=tbCommon::parseIconImgDatas2(IconM::loadOthersIcons($beloadedUserid, $userid, $lmt, $off));
            
			if(count($mainDatas) == 0 ){
				return  excuteState::OKwithDatas([]);
			}
            $icnFids=array_column($mainDatas, 'icnfid');
          
		   // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
			// icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));
            
        }catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    /***
     * 限制 返回 $beloadedUserid 用户信息和 其 icon记录
     * @param unknown $beloadedUserid
     * @param unknown $userid
     * @param unknown $lmt
     * @param unknown $off
     */
   static  public function loadUserIconInfo($beloadedUserid,$userid,$lmt,$off) {       
       try {
           // user detial infomation
           $userDetialP=UserM::DetialStatic($beloadedUserid);
           $userDP=get_object_vars($userDetialP[0]);
           $wardrablUrl="http://1zou.me/api/listitemsnum/".$beloadedUserid;
           // user wardrobe info
           $userDP['wardrobe']=(int) file_get_contents($wardrablUrl);
           $userDP['followstate'] = self::userFollowUserState($userid , $beloadedUserid);
		   $c=self::loadOthersIcons($beloadedUserid, $userid, $lmt, $off);
           $userDP['icons']=self::loadOthersIcons($beloadedUserid, $userid, $lmt, $off)['datas'];
           return excuteState::OKwithDatas($userDP) ;
      }catch (QueryException $e){
           return  excuteState::selectError();
           
       }
      
   }
   
   static public function userFollowUserState($user , $followUser) {
       $dataRow = DB::table('lee_user_follow')->where('userid' , $user)->where('followid', $followUser)->first();
       if($dataRow) {
           return $dataRow->userid;
       }
       return null;
   }

   /**
     * 分页加载 用户的 icon
     * @param bigint $userid 用户id
     * @param int $limit 限制数
     * @param int $offset 偏移量
     */
    static public function loadOwnIcon($userid,$limit=50,$offset=0){ 
        
        try {
            $mainDatas= tbCommon::parseIconImgDatas3(IconM::loadOwnIcon($userid, $limit, $offset));
            $icnFids=array_column($mainDatas, 'icnfid');
            if(count($icnFids) == 0){
                return excuteState::OKwithDatas($icnFids);
            }
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            
            // 非 icon-topic 检索
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');

            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));

            
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    /**
     * 依据 传入的 用户id和 icon的fid的集合 返回对应的数据
     * 传入数据形式 {'iconinfo':{
     *  'userid':userid1,
     *  'fids':[fid1,fid2,fid3]
     *  }}
     * @param Request $request
     */
    static public function loadIconInFids(Request $request){
        try {
            $loadDatas=json_decode($request->input('iconinfo'),true);
            if(count($loadDatas)<1){
                return excuteState::inputDataError();
            }
            $userid=$loadDatas['userid'];           
            
            $mainDatas= tbCommon::parseIconImgDatas(IconM::loadIconInFids($userid,$loadDatas['fids']));
            $icnFids=$loadDatas['fids'];
            
            
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            // 非topic检索数据            
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);

            return excuteState::OKwithDatas(tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid'));
            
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
        
    } 
    
    /**
     * 依据用户的id ,按风格检索icon的数据
     * @param bigint $userid 用户id
     * @param int $lmt  返回数据记录数
     * @param int $ofst 分页数
     */
    static  public function loadIconsByFashion($userid,$fashionStyle,$lmt,$ofst)
    {
        try {
            $styleStr=fashionMap::fashionStylesMapping($fashionStyle);
            
            $styles=explode(',',$styleStr);
            
            foreach ($styles as $strItem){
                IconM::loadIconsByFashion($userid,$strItem,$lmt,$ofst);
            }
            
            $mainDatas= tbCommon::parseIconImgDatas();
        
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            // 合并数据
            return excuteState::OKwithDatas( tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid'));
        
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
    }
    
    
    /**
     * 依据 image的fid集合 返回其标签值
     * @param Request $request
     */
    static public function loadTags(Request $request){
         try {
             //$imgfids=$request->input('imgfids');
             //$imgfids=[290,291,292];
             return excuteState::OKwithDatas(tbCommon::parseImgTagDatas(TagM::getItemsByImgFids($imgfids)));
         } catch (QueryException $e) {
             return excuteState::selectError();
         }
        
    }

    /**
     * 依据icon的fid返回其 评论和回复记录
     * 并 将评论/回复 用户的id改为 名称
     * @param bigint $iconfid, icon的fid
     */
    static  public function getCmtRps($iconfid){
        try {
            // 获得 comment-reply 数据集
            $cmtRpDatas=CommentM::getCmtRps($iconfid);
            // 依据数据集 返回 userid集合
            $userids=tbCommon::useridsFromComments($cmtRpDatas);
            // 返回userid 和 username记录 并将解析为 键值对数组
            $userDatas=UserM::getUserInfo($userids);
            
            $userid2name= tbCommon::userId2Name($userDatas);
            // 解析数据结果
            return excuteState::OKwithDatas(tbCommon::parseCmtRpDatas($cmtRpDatas,$userid2name));
            
        } catch (QueryException $e) {
            return excuteState::selectError();
        }
            
    }
    
    /**
     * 根据icon的fid 和用户userid 写入favour表 更新 icon的beliked字段
     * @param bigint $icnfid,icon's fid
     * @param bigint $userid,user's id
     */
    static public function plusFavour($icnfid,$userid,$belikeduserid){
        DB::beginTransaction();
        try {
            // 写入 favour表
            FavorM::addItem(['iconfid'=>$icnfid,'userid'=>$userid]);
            // 更新 Icon beliked字段
            IconM::plusFavourNum($icnfid);
            DB::commit();
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::insertError();
        }
    }
    
    /**
     * 根据icon的fid 和用户userid 删除favour表 更新 icon的beliked字段
     * @param bigint $icnfid,icon's fid
     * @param bigint $userid,user's id
     */
    static public function minFavour($icnfid,$userid){
        DB::beginTransaction();
        try {
            // 删除 favour表
            FavorM::deltItem($icnfid,$userid);
            // 更新 Icon beliked字段
            IconM::minFavourNum($icnfid);
            DB::commit();
            return excuteState::OK();
        }  catch(QueryException $e) {
            DB::rollBack();
            return excuteState::deleteError();
        }
    }
    
    
    /**
     * 根据icon的fid 和用户userid 写入store表 更新 icon的beliked字段
     * @param bigint $icnfid,icon's fid
     * @param bigint $userid,user's id
     */
    static public function plusStore($icnfid,$userid,$bestoreduserid){
        DB::beginTransaction();
        try {
            // 写入 favour表
            StoreM::addItem(['iconfid'=>$icnfid,'userid'=>$userid]);
            // 更新 Icon beliked字段
            IconM::plusStoreNum($icnfid);
            DB::commit();
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::insertError();
        }
    }
    
    /**
     * 根据icon的fid 和用户userid 删除store表 更新 icon的beliked字段
     * @param bigint $icnfid,icon's fid
     * @param bigint $userid,user's id
     */
    static public function minStore($icnfid,$userid){
        DB::beginTransaction();
        try {
            // 删除 favour表
            StoreM::deltItem($icnfid,$userid);
            // 更新 Icon beliked字段
            IconM::minStoreNum($icnfid);
            DB::commit();
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::deleteError();
        }
    }
    
    /**
     * 浏览数 ++
     * @param unknown $icnfid
     */
    static public function plusBrowseNum($icnfid){
        DB::beginTransaction();
        try {
            IconM::plusBrowseNum($icnfid);
            DB::commit();
            return excuteState::OK();
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::insertError();
        }
    }
    

    /**
     * 依据 icon的fid返回其 topic 数据
     * @param array $icnfids
     * 
     * returns  [   'iconid1'=>[ topicid1,tpctitle1,topicid3,tpctitle3]
     *               "iconid1"=>[topicid2,tpctitle2],
     *               "iconid2"=>[]
     *          ]
     */    
    static public function  loadTpcByIcnFids(array $icnfids){
        // load icon-topic records
        $rp=IconTopicM::loadTpcByIcnIDS($icnfids);
        $rst=[];
        // parse icon-topic datas
        foreach ($icnfids as $value){
            $rst[$value]=[];
            foreach ($rp as $itm){
                if($value == $itm->icnid){
                    array_push($rst[$value], $itm->tpcid,$itm->tpctitle);
                }
            }
        }
        return $rst;
    }
    
    
    /**
     * 依据 话题的id 限制返回 其相关记录
     * @param unknown $userid
     * @param unknown $topicid
     * @param unknown $lmt
     * @param unknown $off
     */
    static  public function loadTpcInfo($userid,$topicid,$lmt,$off){
        DB::beginTransaction();
        try {

            $iconids=IconTopicM::getIconIDs($topicid,$lmt,$off);
            
            $icnColl=[];
            foreach ($iconids as $item){
                array_push($icnColl,$item->iconid);
            }
            
            $tpc=['title','title_en', 'content', 'des_cn' ,'bg_tpcicon','avatar_tpcicon','imgpath','bebrowsed','bestored','follownum','iconnum'];
            
            // topic information
            $tpInfoColl=[];
            $tpcInfo=TopicM::loadTpcInfo($topicid);
            foreach($tpcInfo as $item){
                foreach ($tpc as $OItem){
                    $tpInfoColl[$OItem]=$item->$OItem;
                }
            }
            
            $icnfids=$icnColl;
            $mainDatas= tbCommon::parseIconImgDatas(IconM::loadIconInFids($userid,$icnfids));
            $icnFids=array_column($mainDatas, 'icnfid');
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
            // 非topic检索数据
            $qRst=tbCommon::mergeArrayByPK($mainDatas, $subDatas, 'icnfid');
            
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnfids);
            
            $icnRecords=tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid');
            
            $tpInfoColl['icons']=$icnRecords;
 
            return excuteState::OKwithDatas($tpInfoColl);
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::selectError();
        }
    }
    
    
    /**
     * 用户推荐
     * @param unknown $userid
     * @param unknown $lmt
     * @param unknown $off
     */
    static public function recommendUsers($userid,$lmt,$off){

        DB::beginTransaction();
        try {
            $userids=UserM::getSimilarUsers($userid,$lmt,$off);
            //dd(get_object_vars($userids[0]));
            $t=[];
            foreach ($userids as  $item){
                array_push($t, $item->userid);
            }
            array_shift($t);
            $similarIcons=tbCommon::parseIconImgDatas4(IconM::loadIconsInUserids($userid,$t));
            
            $icnFids=array_column($similarIcons, 'icnfid');
            
            // 检索 icon的fid集合内的  对应的评论数
            $subDatas=CommentM::multiCounts($icnFids);
  
            $qRst=tbCommon::mergeArrayByPK($similarIcons, $subDatas, 'icnfid');
            // icon-topic 检索
            $icnTpc=self::loadTpcByIcnFids($icnFids);
            
            $icnRecords=tbCommon::mergeIcnTpcData($qRst, $icnTpc, 'icnfid');
            
    
            $temp=array();
            foreach ($icnRecords as $oneItem){

                if(array_key_exists($oneItem['userid'], $temp)){
                    array_push(  $temp[$oneItem['userid']], $oneItem);
                }else{
                    $temp[$oneItem['userid']]=[];
                    array_push(  $temp[$oneItem['userid']], $oneItem);
                }
            }
            array_shift($userids);
            
            foreach ($userids as $oneItem){
                if(array_key_exists($oneItem->userid, $temp)){
                    $oneItem->icons=$temp[$oneItem->userid];
                }else{
                    $oneItem->icons=[];
                }
            }

            return  excuteState::OKwithDatas($userids);
        } catch (QueryException $e) {
            DB::rollBack();
            return excuteState::selectError();
        }
       
    }

    
    static public function tst(){
        
        
        return IconM::loadIconsInUserids(8432,[8474,8475]);
        
        die();
        
        
        $tpcIds=(IconTopicM::getTpcIDS(275));
        TopicM::plusTcpIcnS($tpcIds);
        
        die();
        $t=[1,3,4];
        
        TopicM::minTcpIcnS($t);
        die();

       return  self::loadUserIconInfo(34,35,10,0);
        
       //$tst= ['userid'=>1111,'description'=>"sfsdfd",'id'=>"07735dd3-1143-9049-9560-593a2e77db88"];
       //$idss=IconM::addItem($tst);
       //var_dump($idss);
       
        $icn=[ ['icnfid'=>1,"sd"=>"ff"],
           
            ['icnfid'=>2,"sd"=>"fdd"],
            ['icnfid'=>3,"sd"=>"frrf"],
            ['icnfid'=>6,"sd"=>"qqqff"]
            
        ];
        
        $icnTpc=self::loadTpcByIcnFids([1,2,3,6]);
        
        
        
       dd(tbCommon::mergeIcnTpcData($icn, $icnTpc, "icnfid")) ;
       //self::addF();
       die("eee");
        
    }

    
    
}

?>